package com.lianjia.sh.se.kafka.client.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

/**
 * 客户统一的自定义默认配置
 * Created by yangsp1 on 16/7/28.
 */
@Configuration
public class CustomDefaultListenerConfig {
    /**
     * kafka broker主机配置：ip和端口，
     * 多个以逗号分开
     */
    @Value("${kafka.client.listener.default.bootstrap.servers:}")
    String bootstrapServers;

    /**
     * 客户端id，一般指应用名或业务名
     */
    @Value("${kafka.client.listener.default.client.id:}")
    String clientId;

    /**
     * 一次请求最小数据量（单位：字节）
     *
     * 此时可以配置指定大小：提交性能；但会增加延迟返回（因为只有达到一定数据量才会返回）
     */
    @Value("${kafka.client.listener.default.fetch.min.bytes:}")
    Integer fetchＭinBytes;

    /**
     * 默认分组名
     *
     */
    @Value("${kafka.client.listener.default.group.id:}")
    String groupId;

    /**
     * 一次请求最多数据量
     * kafka通过批处理来提高性能。此配置是一次拉取的最大数据条数
     */
    @Value("${kafka.client.listener.default.max.poll.records:}")
    Integer maxPollRecords;

    /**
     * 请求超时时间
     */
    @Value("${kafka.client.listener.default.request.timeout.ms:}")
    Integer requestTimeoutMs;

    /**
     * 自动提交频率
     */
    @Value("${kafka.client.listener.default.auto.commit.interval.ms:}")
    Long autoCommitIntervalMs;

    /**
     * kafka listener并无此配置，此处借用了producer的概念。
     * 因为listener是主题拉取，此为拉取频率
     */
    @Value("${kafka.client.listener.default.linger.ms:}")
    Long lingerMs;

    /**
     * key反序列
     */
    @Value("${kafka.client.listener.default.key.deserializer:}")
    String keyDeserializer;

    /**
     * value反序列化
     */
    @Value("${kafka.client.listener.default.value.deserializer:}")
    String valueDeserializer;

    public String getBootstrapServers() {
        return bootstrapServers;
    }

    public void setBootstrapServers(String bootstrapServers) {
        this.bootstrapServers = bootstrapServers;
    }

    public String getClientId() {
        return clientId;
    }

    public void setClientId(String clientId) {
        this.clientId = clientId;
    }

    public String getGroupId() {
        return groupId;
    }

    public void setGroupId(String groupId) {
        this.groupId = groupId;
    }


    public Integer getRequestTimeoutMs() {
        return requestTimeoutMs;
    }

    public void setRequestTimeoutMs(Integer requestTimeoutMs) {
        this.requestTimeoutMs = requestTimeoutMs;
    }

    public Long getAutoCommitIntervalMs() {
        return autoCommitIntervalMs;
    }

    public void setAutoCommitIntervalMs(Long autoCommitIntervalMs) {
        this.autoCommitIntervalMs = autoCommitIntervalMs;
    }

    public Long getLingerMs() {
        return lingerMs;
    }

    public void setLingerMs(Long lingerMs) {
        this.lingerMs = lingerMs;
    }

    public String getKeyDeserializer() {
        return keyDeserializer;
    }

    public void setKeyDeserializer(String keyDeserializer) {
        this.keyDeserializer = keyDeserializer;
    }

    public String getValueDeserializer() {
        return valueDeserializer;
    }

    public void setValueDeserializer(String valueDeserializer) {
        this.valueDeserializer = valueDeserializer;
    }

    public Integer getFetchＭinBytes() {
        return fetchＭinBytes;
    }

    public void setFetchＭinBytes(Integer fetchＭinBytes) {
        this.fetchＭinBytes = fetchＭinBytes;
    }

    public Integer getMaxPollRecords() {
        return maxPollRecords;
    }

    public void setMaxPollRecords(Integer maxPollRecords) {
        this.maxPollRecords = maxPollRecords;
    }
}
